package doit20.sparksql

/**
 * @author 涛哥
 * @nick_name "deep as the sea"
 * @contact qq:657270652 wx:doit_edu
 * @site www.doitedu.cn
 * @date 2021-04-12
 * @desc sql执行计划，在代码生成中的两种方案：一种是形成函数调用链，一种是尽量生成全局函数
 */
object Demo17 {

  def main(args: Array[String]): Unit = {

    val arr = (s:String)=>s.split(",")

    val filter = (a:Array[String])=>{ a.filter(s=>s.contains("x"))  }

    val concat = (a:Array[String]) =>{ a.mkString("_")}

    val sub = (s:String) => s.substring(0,6)


    val  line = "xx,bb,x6,u7,x7,xyyu"

    // 多次反复进行函数调用
    sub(concat(filter(arr(line))))



    // whole codegen
    val f = (s:String)=>{
      s.split(",").filter(_.contains("x")).mkString("_").substring(0,6)
    }

    // 只用调一次
    f(line)
  }



}
